.global _raise_sw_interrupt

_raise_sw_interrupt:
/*
* r0: interrupt number
* r1: data
*/

mov r2, r0
mov r0, r1
sub r2, r2, #1
mov r2, r2, LSL #3

ref_point:
add pc, pc, r2 
nop 
swi #1  /* pc pointing here at ref_point */
mov pc, lr

swi #2
mov pc, lr

swi #3
mov pc, lr

swi #4
mov pc, lr

swi #5
mov pc, lr

swi #6
mov pc, lr

swi #7
mov pc, lr

swi #8
mov pc, lr

swi #9
mov pc, lr

swi #10       /* dummy interrupt */
mov pc, lr

swi #11       /* timer start */
mov pc, lr

swi #12      /* emac configuration */
mov pc, lr

swi #13     /* SW queue lookup */
mov pc, lr

swi #14     /* Device open */
mov pc, lr

swi #15     /* Device close */
mov pc, lr

swi #16  /* Device post */
mov pc, lr

swi #17  /* Timer cancel */
mov pc, lr

swi #18  /* Reset processor */
mov pc, lr

.end
